export default {
  // 开启路由子模块命名空间
  namespaced: true,

  state: () => ({
    // 存储购物车对象的总数据=>从持久化的本地数据中取出
    cart: JSON.parse(uni.getStorageSync('cart') || '[]')

  }),
  // 声明操作state数据源的节点
  // find() 方法返回通过测试（ 函数内判断） 的数组的第一个元素的值。
  // find() 方法为数组中的每个元素都调用一次函数执行：
  // 当数组中的元素在测试条件时返回 true 时,
  // find() 返回符合条件的元素， 之后的值不会再调用执行函数。
  // 如果没有符合条件的元素返回 undefined
  mutations: {
    addToCart(state, goods) {
      // 根据传进来的商品id和原有的商品id进行判断 如果 findResult为true表示已经存在过该商品 则只添加商品的数量  否则goods数组中没存在该商品 要重新添加到goods商品数组
      // 注意 第一次添加到购物车时候是undefind!所以要先判断没有存在过该商品的情况
      const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
      console.log(findResult);
      if (!findResult) {
        state.cart.push(goods)
      } else {
        findResult.goods_count++
      }
      console.log(state.cart);
      // 每次添加购物车都进行持久化存储
      this.commit('m_cart/saveToStorage')
    },
    // 封装持久化存储购物车数据方法
    saveToStorage(state) {
      uni.setStorageSync('cart', JSON.stringify(state.cart))
    },
    // 跟新购物车商品的勾选状态
    updateGoodsState(state, goods) {
      const findResult = state.cart.find(x => x.goods_id === goods.goods_id)

      if (findResult) {
        findResult.goods_state = goods.goods_state
        this.commit('m_cart/saveToStorage')
      }
    },
    // 更新商品的数量
    undateGoodsCount(state, goods) {
      const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
      if (findResult) {
        findResult.goods_count = goods.goods_count
        this.commit('m_cart/saveToStorage')
      }
    },
    // 删除商品
    removeGoodsById(state, goods_id) {
      state.cart = state.cart.filter(x => x.goods_id !== goods_id)
      this.commit('m_cart/saveToStorage')
    },
    // 更新勾选状态
    updataAllGoodsState(state, newState) {
      state.cart.forEach(x => x.goods_state = newState)
      // 持久化存储
      this.commit('m_cart/saveToStorage')
    }
  },
  // 声明vuex的计算属性
  getters: {
    // 勾选商品的总数量
    total(state) {
      /*    let c = 0
          state.cart.forEach(x => c += x.goods_count)
          return c */
      return state.cart.reduce((total, item) => total += item.goods_count, 0)
    },
    // 全选商品的总数量
    checkoutCount(state) {
      return state.cart.filter(x => x.goods_state).reduce((total, item) => total += item.goods_count, 0)
    },
    // 勾选商品的总价格
    checkdGoodsAmount(state) {
      return state.cart.filter(x => x.goods_state).reduce((total, item) => total += item.goods_count * item.goods_price,
        0).toFixed(2)
    }

  },
}
